package comment_api

import (
	"software/models/res"
	"software/service"

	"github.com/gin-gonic/gin"
	"go.mongodb.org/mongo-driver/bson/primitive"
)

// CommentAuditRequest 评论审核请求
type CommentAuditRequest struct {
	Content string `json:"content" binding:"required"` // 评论内容
}

// CommentAuditResponse 评论审核响应
type CommentAuditResponse struct {
	Passed bool   `json:"passed"`          // 是否通过审核
	Label  string `json:"label,omitempty"` // 违规标签
}

// AuditCommentContent 审核评论内容
func (p CommentApi) AuditCommentContent(c *gin.Context) {
	var req CommentAuditRequest

	// 绑定请求参数
	if err := c.ShouldBindJSON(&req); err != nil {
		res.FailWithMsg("参数错误: "+err.Error(), c)
		return
	}

	// 创建内容审核服务
	contentAuditService := service.ContentAuditService{}

	// 审核内容
	passed, label, err := contentAuditService.AuditText(req.Content)
	if err != nil {
		res.FailWithMsg("评论审核失败: "+err.Error(), c)
		return
	}

	// 初始化响应
	response := CommentAuditResponse{
		Passed: passed,
		Label:  label,
	}

	res.OKWithData(response, c)
}

// AuditComment 审核指定评论
func (p CommentApi) AuditComment(c *gin.Context) {
	// 获取评论ID
	commentIDStr := c.Param("id")

	// 将ID转换为ObjectID
	commentID, err := primitive.ObjectIDFromHex(commentIDStr)
	if err != nil {
		res.FailWithMsg("无效的评论ID格式", c)
		return
	}

	// 直接调用评论审核函数
	passed, label, err := service.AuditComment(c, commentID)
	if err != nil {
		res.FailWithMsg("评论审核失败: "+err.Error(), c)
		return
	}

	// 设置消息
	var message string
	var status int
	if passed {
		message = "评论审核通过，正常显示"
		status = 1 // 正常
	} else {
		message = "评论内容违规，已封禁"
		status = 2 // 封禁
	}

	// 返回审核结果
	response := map[string]interface{}{
		"comment_id": commentID.Hex(),
		"passed":     passed,
		"label":      label,
		"status":     status,
		"message":    message,
	}

	res.OKWithData(response, c)
}

// UpdateCommentStatus 更新评论状态
func (p CommentApi) UpdateCommentStatus(c *gin.Context) {
	var req struct {
		ID     string `json:"id" binding:"required"`     // 评论ID
		Status int8   `json:"status" binding:"required"` // 状态值
	}

	// 绑定并验证请求数据
	if err := c.ShouldBindJSON(&req); err != nil {
		res.FailWithMsg("参数错误", c)
		return
	}

	// 将ID转换为ObjectID
	commentID, err := primitive.ObjectIDFromHex(req.ID)
	if err != nil {
		res.FailWithMsg("无效的评论ID格式", c)
		return
	}

	// 直接调用更新评论状态函数
	if err := service.UpdateCommentStatus(c, commentID, req.Status); err != nil {
		res.FailWithMsg("更新评论状态失败: "+err.Error(), c)
		return
	}

	// 返回成功响应
	res.OK(c)
}

// DeleteComment 删除评论（软删除）
func (p CommentApi) DeleteComment(c *gin.Context) {
	// 获取评论ID
	commentIDStr := c.Param("id")

	// 将ID转换为ObjectID
	commentID, err := primitive.ObjectIDFromHex(commentIDStr)
	if err != nil {
		res.FailWithMsg("无效的评论ID格式", c)
		return
	}

	// 调用服务层删除评论
	if err := service.DeleteComment(c, commentID); err != nil {
		res.FailWithMsg("删除评论失败: "+err.Error(), c)
		return
	}

	// 返回成功响应
	res.OKWithMsg("评论已删除", c)
}
